Entity Framework (EF) ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করতে ব্যবহার করা হয় এবং এটি CRUD অপারেশনগুলি (Create, Read, Update, Delete) সম্পাদন করতে সহায়তা করে। EF ডেভেলপারদের ডেটাবেস অপারেশন সহজে পরিচালনা করতে সুবিধা প্রদান করে, যেখানে আপনাকে SQL কোড লেখার প্রয়োজন হয় না। এই টিউটোরিয়ালে আমরা দেখব কিভাবে EF ব্যবহার করে CRUD অপারেশন সম্পাদন করা যায়।
Create অপারেশন ডেটাবেসে নতুন রেকর্ড সন্নিবেশ করতে ব্যবহৃত হয়। EF-এ একটি নতুন Entity তৈরি করে, DbContext এর Add
বা AddAsync
মেথড ব্যবহার করে ডেটাবেসে রেকর্ড সন্নিবেশ করা যায়।
using (var context = new SchoolContext())
{
var student = new Student
{
Name = "John Doe",
Age = 20,
Address = "123 Main Street"
};
// Add the student entity to the context
context.Students.Add(student);
// Save changes to the database
context.SaveChanges();
}
এখানে:
context.Students.Add(student)
দিয়ে একটি নতুন Student
Entity যোগ করা হচ্ছে।context.SaveChanges()
দিয়ে পরিবর্তনগুলি ডেটাবেসে সেভ করা হচ্ছে।Read অপারেশন ডেটাবেস থেকে রেকর্ড পড়ার জন্য ব্যবহৃত হয়। EF তে LINQ (Language Integrated Query) ব্যবহার করে ডেটাবেসের রেকর্ডগুলো পড়া যায়।
using (var context = new SchoolContext())
{
// Retrieve all students from the database
var students = context.Students.ToList();
// Retrieve a specific student by id
var student = context.Students.FirstOrDefault(s => s.StudentId == 1);
Console.WriteLine("Student Name: " + student.Name);
}
এখানে:
context.Students.ToList()
দিয়ে সব ছাত্রের তালিকা পড়া হচ্ছে।context.Students.FirstOrDefault()
দিয়ে একটি নির্দিষ্ট Student
রেকর্ড ID অনুযায়ী পড়া হচ্ছে।LINQ কুয়েরি আরো জটিল হতে পারে, যেমন:
var studentsAbove18 = context.Students
.Where(s => s.Age > 18)
.OrderBy(s => s.Name)
.ToList();
Update অপারেশন ডেটাবেসে বিদ্যমান রেকর্ডে পরিবর্তন করার জন্য ব্যবহৃত হয়। EF তে একটি Entity কে মডিফাই করে এবং SaveChanges()
মেথড ব্যবহার করে আপডেট করা হয়।
using (var context = new SchoolContext())
{
// Retrieve the student to be updated
var student = context.Students.FirstOrDefault(s => s.StudentId == 1);
if (student != null)
{
// Modify the student's information
student.Name = "Updated Name";
student.Age = 21;
// Save the changes to the database
context.SaveChanges();
}
}
এখানে:
context.Students.FirstOrDefault()
দিয়ে একটি নির্দিষ্ট Student
Entity পড়া হচ্ছে।SaveChanges()
দিয়ে পরিবর্তন ডেটাবেসে সেভ করা হচ্ছে।Delete অপারেশন ডেটাবেস থেকে একটি Entity মুছে ফেলার জন্য ব্যবহৃত হয়। EF তে একটি Entity কে মুছে ফেলার জন্য Remove()
মেথড ব্যবহার করা হয়।
using (var context = new SchoolContext())
{
// Retrieve the student to be deleted
var student = context.Students.FirstOrDefault(s => s.StudentId == 1);
if (student != null)
{
// Remove the student from the context
context.Students.Remove(student);
// Save the changes to the database
context.SaveChanges();
}
}
এখানে:
context.Students.Remove(student)
দিয়ে Entity কে মুছে ফেলা হচ্ছে।context.SaveChanges()
দিয়ে ডেটাবেসে পরিবর্তন সেভ করা হচ্ছে।EF 6 এবং EF Core উভয়ই Asynchronous CRUD অপারেশন সমর্থন করে, যার মাধ্যমে ডেটাবেস অপারেশনগুলো ব্যাকগ্রাউন্ডে সম্পাদিত হয় এবং UI থ্রেড ব্লক না হয়।
using (var context = new SchoolContext())
{
var student = new Student
{
Name = "Jane Doe",
Age = 22,
Address = "456 Another Street"
};
// Asynchronously add the student entity
await context.Students.AddAsync(student);
// Asynchronously save changes to the database
await context.SaveChangesAsync();
}
using (var context = new SchoolContext())
{
// Asynchronously retrieve a student
var student = await context.Students.FirstOrDefaultAsync(s => s.StudentId == 1);
Console.WriteLine("Student Name: " + student.Name);
}
EF তে LINQ (Language Integrated Query) ব্যবহার করে ডেটাবেস অপারেশন সহজেই করা যায়। LINQ এর মাধ্যমে filtering, sorting, এবং grouping এর মতো অপারেশন করা সম্ভব।
using (var context = new SchoolContext())
{
var students = context.Students
.Where(s => s.Age > 18)
.OrderBy(s => s.Name)
.ToList();
}
LINQ কুয়েরি ব্যবহার করে filter, join, এবং projection এর মতো আরও অনেক ধরনের জটিল কুয়েরি করা সম্ভব।
Entity Framework ডেটাবেসের সাথে CRUD অপারেশন সহজেই সম্পাদন করতে সহায়ক। EF এর মাধ্যমে Create, Read, Update, এবং Delete অপারেশনগুলি কোডের মাধ্যমে সম্পন্ন করা সম্ভব, যেখানে SQL কোড লেখার প্রয়োজন হয় না। EF তে LINQ ব্যবহার করে ডেটাবেস কুয়েরি করা যায়, যা ডেভেলপারদের ডেটাবেস অপারেশন আরও সহজ এবং কার্যকরভাবে পরিচালনা করতে সাহায্য করে। Asynchronous অপারেশনও ব্যবহার করা সম্ভব, যা অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করতে সহায়তা করে।
Entity Framework (EF) এর মাধ্যমে Create, Read, Update, এবং Delete (CRUD) অপারেশনগুলো খুব সহজে পরিচালনা করা যায়। EF ডাটাবেসের সাথে যোগাযোগের জন্য DbContext এবং DbSet ক্লাস ব্যবহার করে এই অপারেশনগুলো সম্পাদন করা হয়। এখানে আমরা প্রতিটি CRUD অপারেশন কীভাবে EF এর মাধ্যমে বাস্তবায়িত করা যায় তা বিস্তারিতভাবে দেখব।
Create অপারেশন নতুন রেকর্ড ডেটাবেসে ইনসার্ট করতে ব্যবহৃত হয়। EF তে, আপনি একটি Entity ক্লাসের নতুন অবজেক্ট তৈরি করেন এবং সেটি DbSet এ অ্যাড করে ডেটাবেসে সেভ করতে পারেন।
using (var context = new SchoolContext())
{
var newStudent = new Student
{
Name = "John Doe",
Age = 20,
Address = "1234 Elm St"
};
context.Students.Add(newStudent); // Add the new student to DbSet
context.SaveChanges(); // Save changes to database
}
এখানে:
Student
অবজেক্ট তৈরি করা হয়েছে।Read অপারেশন ডেটাবেস থেকে ডেটা রিট্রাইভ বা পড়তে ব্যবহৃত হয়। EF তে, আপনি DbSet
এর মাধ্যমে LINQ কুয়েরি ব্যবহার করে ডেটা রিড করতে পারেন।
using (var context = new SchoolContext())
{
// একক স্টুডেন্ট রিড করা
var student = context.Students.FirstOrDefault(s => s.StudentId == 1);
Console.WriteLine($"Name: {student.Name}, Age: {student.Age}");
// সকল স্টুডেন্ট রিড করা
var allStudents = context.Students.ToList();
foreach(var s in allStudents)
{
Console.WriteLine($"Name: {s.Name}, Age: {s.Age}");
}
}
এখানে:
StudentId
১ এর স্টুডেন্টটি রিড করে।LINQ (Language Integrated Query) ব্যবহার করে আরও জটিল কুয়েরি করা সম্ভব, যেমন ফিল্টারিং, গ্রুপিং বা অর্ডারিং।
Update অপারেশন ডেটাবেসে বিদ্যমান রেকর্ডগুলির মান পরিবর্তন করতে ব্যবহৃত হয়। EF তে, একটি Entity এর অবজেক্টকে রিট্রাইভ করে তার প্রপার্টি পরিবর্তন করে, তারপর SaveChanges()
কল করে আপডেট করা যায়।
using (var context = new SchoolContext())
{
// প্রথমে স্টুডেন্টটি রিট্রাইভ করুন
var student = context.Students.FirstOrDefault(s => s.StudentId == 1);
if (student != null)
{
student.Name = "John Smith"; // Name পরিবর্তন
student.Age = 21; // Age পরিবর্তন
context.SaveChanges(); // Save changes to the database
}
}
এখানে:
EF তে, যখন একটি Entity ক্লাসের অবজেক্ট পরিবর্তন করা হয়, EF অটোমেটিক্যালি এটি ট্র্যাক করে এবং SaveChanges() কল করার মাধ্যমে পরিবর্তন ডেটাবেসে আপডেট হয়ে যায়।
Delete অপারেশন ডেটাবেস থেকে রেকর্ড মুছতে ব্যবহৃত হয়। EF তে, আপনি DbSet
থেকে একটি Entity অবজেক্ট রিমুভ করে, তারপর SaveChanges()
কল করে ডেটাবেস থেকে রেকর্ডটি মুছে ফেলতে পারেন।
using (var context = new SchoolContext())
{
// স্টুডেন্টটি রিট্রাইভ করুন
var student = context.Students.FirstOrDefault(s => s.StudentId == 1);
if (student != null)
{
context.Students.Remove(student); // Entity রিমুভ করা
context.SaveChanges(); // Save changes to the database
}
}
এখানে:
DbSet
থেকে রিমুভ করা হয়েছে।Entity Framework এ CRUD অপারেশন সমূহে LINQ ব্যবহার করতে পারেন। তবে যদি আপনি Raw SQL কুয়েরি ব্যবহার করতে চান, তাও সম্ভব।
using (var context = new SchoolContext())
{
var studentsOlderThan20 = context.Students
.Where(s => s.Age > 20)
.ToList();
foreach (var student in studentsOlderThan20)
{
Console.WriteLine($"Name: {student.Name}, Age: {student.Age}");
}
}
using (var context = new SchoolContext())
{
var students = context.Students.FromSqlRaw("SELECT * FROM Students WHERE Age > {0}", 20).ToList();
foreach (var student in students)
{
Console.WriteLine($"Name: {student.Name}, Age: {student.Age}");
}
}
Entity Framework তে CRUD অপারেশনগুলি খুবই সহজে করা যায়, যেখানে DbContext এবং DbSet ক্লাসের মাধ্যমে ডেটাবেসে রেকর্ড তৈরি, পড়া, আপডেট এবং মুছা সম্ভব। LINQ এবং Raw SQL কুয়েরি ব্যবহার করে আরও জটিল ডেটা অপারেশন করা যেতে পারে। EF এর মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনকে ডেটাবেসের সঙ্গে কার্যকরভাবে ইন্টিগ্রেট করতে পারেন।
LINQ (Language Integrated Query) একটি শক্তিশালী টুল যা C# বা VB.NET এর মতো ভাষার সাথে SQL-এ থাকা কুয়েরি ফাংশনালিটি ইন্টিগ্রেট করে। LINQ ডেটা কুয়েরি করার জন্য একটি সহজ, এক্সপ্রেসিভ এবং টাইপ-সেফ উপায় প্রদান করে, যা ডেটাবেস, অ্যারে, তালিকা (list), XML বা অন্যান্য ডেটা সোর্সে কুয়েরি চালাতে ব্যবহৃত হয়। Entity Framework (EF) এ LINQ ব্যবহার করে ডেটাবেস থেকে ডেটা কুয়েরি করা যায়, যা SQL-এর মতো কার্যকর কিন্তু আরও সিম্পল এবং টাইপ-সেফ।
LINQ এক ধরনের কুয়েরি সিনট্যাক্স সরবরাহ করে যা বিভিন্ন ডেটা সোর্সের উপর কাজ করে। এটি মূলত দুটি প্রধান প্রকারে বিভক্ত:
LINQ ব্যবহারের মূল সুবিধাগুলি হলো:
EF এর সাথে LINQ ব্যবহার করে ডেটা কুয়েরি করা অনেক সহজ। Entity Framework নিজেই LINQ কোডকে SQL কুয়েরিতে রূপান্তর করে এবং ডেটাবেসে চালানোর জন্য প্রেরণ করে।
LINQ এর দুটি প্রধান সিনট্যাক্স রয়েছে:
এখানে, উভয় সিনট্যাক্সের উদাহরণ দেওয়া হয়েছে, যাতে আপনি আপনার প্রয়োজন অনুযায়ী ব্যবহার করতে পারেন।
Query Syntax হলো SQL-র মতো একটি স্টাইল যেখানে আপনি from
, where
, select
, orderby
ইত্যাদি কীওয়ার্ড ব্যবহার করে কুয়েরি লেখেন। এটি দেখতে অনেকটা SQL কুয়েরির মতো।
উদাহরণ:
var customers = from c in context.Customers
where c.City == "Dhaka"
orderby c.Name
select c;
এই কুয়েরি ডেটাবেস থেকে "Dhaka" সিটির সকল কাস্টমারকে বের করবে এবং তাদের নাম অনুসারে সাজাবে।
var filteredCustomers = from c in context.Customers
where c.Age > 30
select new { c.Name, c.Email };
এই কুয়েরি শুধুমাত্র ৩০ বছরের বেশি বয়সী কাস্টমারদের নাম এবং ইমেল দেখাবে।
Method Syntax হলো ফাংশনাল প্রোগ্রামিং পদ্ধতি, যেখানে LINQ মেথডগুলো ব্যবহার করা হয় যেমন Where()
, Select()
, OrderBy()
, GroupBy()
ইত্যাদি।
উদাহরণ:
var customers = context.Customers
.Where(c => c.City == "Dhaka")
.OrderBy(c => c.Name)
.ToList();
এখানে Where()
মেথডটি City == "Dhaka"
শর্তে কাস্টমারদের ফিল্টার করবে এবং OrderBy()
মেথডটি কাস্টমারদের নাম অনুযায়ী সাজাবে।
var filteredCustomers = context.Customers
.Where(c => c.Age > 30)
.Select(c => new { c.Name, c.Email })
.ToList();
এই কুয়েরি ৩০ বছরের বেশি বয়সী কাস্টমারদের নাম এবং ইমেল বের করবে।
Entity Framework এ LINQ কুয়েরি করতে আপনি Asynchronous মেথড ব্যবহার করতে পারেন, যা ডেটাবেস কুয়েরি সম্পন্ন হওয়ার সময় আপনার অ্যাপ্লিকেশনকে ব্লক না করে অন্যান্য কাজ করতে সাহায্য করে। এটি পারফরম্যান্স উন্নত করতে সাহায্য করে, বিশেষ করে বড় ডেটাসেটের সাথে কাজ করার সময়।
var customers = await context.Customers
.Where(c => c.City == "Dhaka")
.OrderBy(c => c.Name)
.ToListAsync();
এখানে ToListAsync()
মেথডটি কুয়েরি সম্পন্ন হওয়া পর্যন্ত অ্যাসিঙ্ক্রোনাসভাবে অপেক্ষা করবে এবং তারপর ফলাফল ফিরিয়ে দেবে।
LINQ কুয়েরি চালানোর সময় Entity Framework অত্যন্ত কার্যকরী। EF নিজেই LINQ কুয়েরিগুলিকে দক্ষ SQL কুয়েরিতে রূপান্তর করে এবং ডেটাবেসে প্রেরণ করে। তবে কিছু ক্ষেত্রে ডেটাবেসের অকার্যকর কুয়েরি বা N+1
সমস্যা হতে পারে, যা পারফরম্যান্সকে প্রভাবিত করতে পারে।
Include()
মেথড ব্যবহার করুন।AsNoTracking()
ব্যবহার করুন, যা কনটেক্সট ট্র্যাকিং বাদ দিয়ে পারফরম্যান্স উন্নত করবে।var customers = context.Customers
.AsNoTracking()
.Where(c => c.City == "Dhaka")
.ToList();
LINQ একটি শক্তিশালী এবং টাইপ-সেফ টুল যা C# ব্যবহারকারীদের জন্য ডেটা কুয়েরি সহজ করে তোলে। Entity Framework এর মাধ্যমে LINQ ব্যবহার করে ডেটাবেস থেকে ডেটা কুয়েরি করা সহজ, এবং এটি SQL কোডের মতোই কার্যকর। LINQ এর সাহায্যে আপনি বিভিন্ন ধরনের ডেটা অপারেশন যেমন ফিল্টার, অর্ডারিং, গ্রুপিং, এবং জটিল কুয়েরি গঠন করতে পারেন। Asynchronous LINQ ব্যবহার করে ডেটাবেস কুয়েরির পারফরম্যান্স আরও উন্নত করা যায়।
Entity Framework (EF) সাধারণত LINQ (Language Integrated Query) ব্যবহার করে ডেটা কুয়েরি করে থাকে, তবে অনেক সময় ডেটাবেস সম্পর্কিত জটিল কুয়েরি বা স্পেসিফিক অপারেশন সম্পাদনের জন্য Stored Procedures বা Raw SQL Queries ব্যবহার করা প্রয়োজন হতে পারে। EF-এ এই দুটি অপশন ব্যবহারের মাধ্যমে আপনি উন্নত কুয়েরি অপ্টিমাইজেশন এবং ডেটাবেসের পারফরম্যান্স উন্নত করতে পারবেন।
Stored Procedure হল ডেটাবেসে সংরক্ষিত একটি প্রি-কম্পাইলড SQL স্টেটমেন্ট বা ব্লক, যা একাধিক অপারেশন বা কুয়েরি একসাথে সম্পাদন করে। Entity Framework-এ Stored Procedure ব্যবহার করার জন্য, আপনি EF এর মাধ্যমে সেগুলো কল করতে পারেন এবং ফলাফল হ্যান্ডল করতে পারেন।
Entity Framework-এ Stored Procedure কল করার জন্য, আপনাকে DbContext এর মাধ্যমে সেই Stored Procedure এর নাম উল্লেখ করে কল করতে হবে। যদি Stored Procedure কোনো আউটপুট রিটার্ন করে, তবে আপনি তার ফলাফলগুলিকে একটি DbSet বা অন্য কোনো Collection-এ ম্যাপ করতে পারবেন।
using (var context = new YourDbContext())
{
var result = context.Database
.SqlQuery<YourEntity>("EXEC YourStoredProcedure @param1, @param2",
new SqlParameter("@param1", value1),
new SqlParameter("@param2", value2))
.ToList();
}
এখানে YourStoredProcedure
হচ্ছে Stored Procedure এর নাম এবং YourEntity
হচ্ছে সেই মডেল ক্লাস যেটি আপনি রিটার্নেড ডেটার সাথে ম্যাপ করতে চান।
Stored Procedure শুধু ডেটা রিড করতে নয়, Insert, Update, Delete অপারেশনও করতে পারে। নিচে একটি উদাহরণ দেওয়া হলো, যেখানে Stored Procedure ব্যবহার করে ডেটাবেসে Insert করা হয়েছে:
using (var context = new YourDbContext())
{
var result = context.Database
.ExecuteSqlCommand("EXEC InsertUser @name, @email",
new SqlParameter("@name", "John Doe"),
new SqlParameter("@email", "john.doe@example.com"));
}
এখানে ExecuteSqlCommand
ব্যবহার করা হয়েছে কারণ এটি কোনো রিটার্ন ভ্যালু প্রদান করবে না। এটি শুধুমাত্র SQL কমান্ড বা Stored Procedure চালায়।
Entity Framework এর মাধ্যমে আপনি Raw SQL Queries ব্যবহার করতে পারেন, যেখানে আপনি ম্যানুয়ালি SQL কুয়েরি লিখে ডেটাবেস থেকে ডেটা ফেচ করতে পারেন। Raw SQL Query ব্যবহার করার সময়, EF আপনাকে কুয়েরি ফরম্যাটের সঠিকতা নিশ্চিত করতে সাহায্য করবে।
যখন আপনি Raw SQL কুয়েরি ব্যবহার করেন, তখন আপনার ডেটাবেসের টেবিলের সাথে সঠিক Entity ক্লাসের ম্যাপিং নিশ্চিত করতে হবে।
using (var context = new YourDbContext())
{
var users = context.Users
.FromSqlRaw("SELECT * FROM Users WHERE Age > {0}", 18)
.ToList();
}
এখানে FromSqlRaw ব্যবহার করা হয়েছে, যার মাধ্যমে আপনি SQL কুয়েরি রান করতে পারেন এবং ডেটাবেস থেকে ফলাফল মডেল ক্লাসে ম্যাপ হয়।
Raw SQL কুয়েরি দিয়ে আপনি ডেটাবেসে Update বা Delete অপারেশনও করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো:
using (var context = new YourDbContext())
{
var result = context.Database
.ExecuteSqlRaw("UPDATE Users SET Age = Age + 1 WHERE Age < {0}", 30);
}
এখানে ExecuteSqlRaw ব্যবহার করা হয়েছে যা Update বা Delete অপারেশন পরিচালনা করে এবং কোনো ভ্যালু রিটার্ন করে না।
Stored Procedure এবং Raw SQL কুয়েরি ব্যবহার করা Entity Framework এ আরও উন্নত এবং কাস্টম ডেটাবেস অপারেশন পরিচালনার জন্য সহায়ক। এগুলি ডেটাবেস পারফরম্যান্স বৃদ্ধি করতে পারে এবং কাস্টম SQL কুয়েরি ব্যবহারের সুযোগ প্রদান করে। তবে, এগুলোর ব্যবহার সঠিকভাবে করা উচিত, যাতে কোডের সুরক্ষা এবং Maintenance সুবিধাজনক থাকে।
Entity Framework (EF) ট্রানজেকশন ব্যবহারের জন্য একটি শক্তিশালী মেকানিজম সরবরাহ করে, যা আপনাকে একাধিক ডেটাবেস অপারেশনকে একত্রে একটানা কার্যকরী করতে সাহায্য করে। ট্রানজেকশন ব্যবহারের মাধ্যমে আপনি নিশ্চিত করতে পারেন যে, একাধিক অপারেশন একযোগভাবে সফলভাবে সম্পন্ন হচ্ছে, অন্যথায় কোনো একটি অপারেশন ব্যর্থ হলে, পূর্বের সমস্ত অপারেশন রোলব্যাক (rollback) করা হবে, যাতে ডেটাবেসের অখণ্ডতা বজায় থাকে।
ট্রানজেকশন হল একটি অ্যাটমিক ইউনিট যা ডেটাবেসে এক বা একাধিক কার্যক্রম সম্পাদিত করে। একটি ট্রানজেকশনের প্রধান উদ্দেশ্য হল ডেটাবেসের অবস্থা সঠিক এবং অখণ্ড রাখা। এতে ৪টি মূল বৈশিষ্ট্য থাকে, যা ACID (Atomicity, Consistency, Isolation, Durability) নামক গুণাবলী হিসেবে পরিচিত।
Entity Framework এ ট্রানজেকশন ব্যবহারের জন্য মূলত DbContext ব্যবহার করা হয়। EF ডিফল্টভাবে প্রতি SaveChanges() কলের সময় একটি ট্রানজেকশন শুরু করে, কিন্তু আপনি যদি নিজস্ব ট্রানজেকশন নিয়ন্ত্রণ করতে চান, তবে DbContext.Database.BeginTransaction()
মেথড ব্যবহার করে এটি পরিচালনা করতে পারেন।
যখন আপনি SaveChanges()
মেথড কল করেন, EF স্বয়ংক্রিয়ভাবে একটি ট্রানজেকশন শুরু করে। যদি সব অপারেশন সফল হয়, তবে ট্রানজেকশন কমিট (commit) হয়, এবং যদি কোনো অপারেশন ব্যর্থ হয়, তবে সমস্ত পরিবর্তন রোলব্যাক (rollback) করা হয়।
using (var context = new YourDbContext())
{
var entity1 = new Entity1 { Property1 = "Value1" };
var entity2 = new Entity2 { Property2 = "Value2" };
context.Entity1s.Add(entity1);
context.Entity2s.Add(entity2);
// SaveChanges() স্বয়ংক্রিয়ভাবে ট্রানজেকশন পরিচালনা করবে
context.SaveChanges();
}
আপনি যদি একটি ট্রানজেকশনের মধ্যে একাধিক ডেটাবেস অপারেশন করতে চান, তাহলে আপনাকে BeginTransaction ব্যবহার করতে হবে। এই পদ্ধতিতে, আপনি ট্রানজেকশন শুরু, কমিট, এবং রোলব্যাক পরিচালনা করতে পারবেন।
using (var context = new YourDbContext())
{
// Explicitly start a transaction
using (var transaction = context.Database.BeginTransaction())
{
try
{
var entity1 = new Entity1 { Property1 = "Value1" };
var entity2 = new Entity2 { Property2 = "Value2" };
context.Entity1s.Add(entity1);
context.Entity2s.Add(entity2);
// Save changes within the transaction
context.SaveChanges();
// Commit the transaction
transaction.Commit();
}
catch (Exception)
{
// Rollback the transaction if any exception occurs
transaction.Rollback();
throw;
}
}
}
Asynchronous অপারেশনেও আপনি ট্রানজেকশন পরিচালনা করতে পারেন। SaveChangesAsync()
এবং BeginTransactionAsync()
মেথড ব্যবহার করে আপনি ব্যাকগ্রাউন্ডে ট্রানজেকশন পরিচালনা করতে পারেন।
using (var context = new YourDbContext())
{
// Explicitly start a transaction
using (var transaction = await context.Database.BeginTransactionAsync())
{
try
{
var entity1 = new Entity1 { Property1 = "Value1" };
var entity2 = new Entity2 { Property2 = "Value2" };
context.Entity1s.Add(entity1);
context.Entity2s.Add(entity2);
// Save changes asynchronously within the transaction
await context.SaveChangesAsync();
// Commit the transaction
await transaction.CommitAsync();
}
catch (Exception)
{
// Rollback the transaction if any exception occurs
await transaction.RollbackAsync();
throw;
}
}
}
যদি আপনি একাধিক ডেটাবেসে বা ডিস্ট্রিবিউটেড ট্রানজেকশন পরিচালনা করতে চান, তবে TransactionScope
ব্যবহার করা যেতে পারে। এটি একাধিক DbContext বা বিভিন্ন সিস্টেমে ডেটাবেস ট্রানজেকশন পরিচালনার জন্য উপযুক্ত।
using (var scope = new TransactionScope())
{
using (var context1 = new YourDbContext())
{
context1.Entity1s.Add(new Entity1 { Property1 = "Value1" });
context1.SaveChanges();
}
using (var context2 = new AnotherDbContext())
{
context2.Entity2s.Add(new Entity2 { Property2 = "Value2" });
context2.SaveChanges();
}
// Complete the transaction
scope.Complete();
}
Entity Framework এ ট্রানজেকশন ব্যবহারের মাধ্যমে আপনি একাধিক ডেটাবেস অপারেশনকে একত্রে সফলভাবে সম্পন্ন করতে পারেন, অথবা কোনো একটি অপারেশন ব্যর্থ হলে পুরো প্রক্রিয়া রোলব্যাক করতে পারেন। আপনি DbContext.Database.BeginTransaction()
বা TransactionScope
ব্যবহার করে স্বতন্ত্র ট্রানজেকশন তৈরি করতে পারেন, যা ডেটাবেসের অবস্থা অখণ্ড রাখার জন্য খুবই গুরুত্বপূর্ণ। EF ডিফল্টভাবে ট্রানজেকশন পরিচালনা করে, তবে আপনি প্রয়োজন অনুসারে এটি কাস্টমাইজ করতে পারেন।
common.read_more